// vector<string> new_lines;
//
// for(line in lines)
// {
//   i = 0;
//   string new_line;
//
//   while(i < line.length)
//   {
//     if line[i] =~ "/*"
//       inblock = true;
//       i++
//     elseif line[i] =~ "*/"
//       inblock = false;
//       i++
//     elsif line[i] =~ "//"
//       break;
//     elsif (!inblock)
//       new_line.add(line[i])
//     i++;
//   }
//
//   if (!inblock)
//     new_lines.add(new_line)
// }

// return new_lines
// -------------------------------------------------------------------------------------

class Solution {
public
  List<String> removeComments(String[] source)
  {
    boolean inBlock = false; // 当前字符，是否处于 /* …… */ 注释块内
    StringBuilder newline = null; // 每一行删除注释后的字符串
    List<String> ans = new ArrayList(); // answner 返回的 字符串数组

    for (String line : source)
    {
      char[] chars = line.toCharArray(); // 每一行字符串，转成 char[] 字符数组

      int i = 0; //

      if (!inBlock)
        newline = new StringBuilder(); // 如果【不在】注释块内，创建【新行】

      while (i < line.length()) // 遍历完每一行【所有】char 字符
      {
        if (!inBlock && i + 1 < line.length() && chars[i] == '/' && chars[i + 1] == '*') // 匹配到 "/*" 注释快【起始】字符
        {
          inBlock = true; // 标记 注释快【开始】
          i++;
        }
        else if (inBlock && i + 1 < line.length() && chars[i] == '*' && chars[i + 1] == '/') // 匹配到 "*/" 注释快【结束】字符
        {
          inBlock = false; // 标记 注释快【结束】
          i++;
        }
        else if (!inBlock && i + 1 < line.length() && chars[i] == '/' && chars[i + 1] == '/') // 匹配到 "//" 单行注释
        {
          break; // 单行注释，直接【删除】
        }
        else if (!inBlock)
        {
          newline.append(chars[i]); // 追加【非】注释的 char 字符
        }

        i++; // 字符往后移
      }

      // 追加【非】注释的 字符串行
      if (!inBlock && newline.length() > 0)
      {
        ans.add(new String(newline));
      }
    }

    return ans;
  }
}

// 作者：LeetCode
// 链接：https://leetcode-cn.com/problems/remove-comments/solution/shan-chu-zhu-shi-by-leetcode/
// 来源：力扣（LeetCode）
// 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。